package com.sc.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Component
public class JWTUtil {

    /**
     * 创建令牌
     *
     * @param secretKey 密钥
     * @param ttlMillis 持续时间
     * @param userId 用户id
     * @return JWT令牌
     */
    public static String createJWT(String secretKey, Long ttlMillis, Long userId) {
        // 指定签名算法
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

        // 生成JWT的时间
        long time = System.currentTimeMillis() + ttlMillis;
        Date exp = new Date(time);

        // 私有声明
        Map<String, Object> claims = new HashMap<>();
        claims.put("id", userId);

        // 设置JWT的body
        JwtBuilder builder = Jwts.builder()
                .setClaims(claims)
                .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))
                .setExpiration(exp);

        return builder.compact();
    }

    /**
     * 解析令牌
     *
     * @param secretKey 密钥
     * @param token 请求头
     * @return 用户信息
     */
    public static Claims parseJWT(String secretKey, String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
                .parseClaimsJws(token)
                .getBody();

        return claims;
    }
}
